#pragma once
#include <vector>
#include "NeroEngine\NEventSubscriber.h"

namespace Engine
{
	class NCamera;
}

namespace Game
{
class NDirector : public Engine::NEventSubscriber
{
private:
	typedef std::vector<Engine::NCamera*> Cameras;

public:
	NDirector(void);
	
	virtual ~NDirector(void);

	static void Initialize();

	static void Deinitialize();

	static NDirector* GetInstance();

	void AddCamera(Engine::NCamera* camera);

	Engine::NCamera* GetCurrentCamera();

	void SetCamera(const std::string& cameraName);

	void SetInitialCamera(const std::string& cameraName);

	virtual void Notify(Engine::NEventPublisher* aEventPublisher, float wallTime);

private:
	void LoadXml(const char* file);

private:
	std::string mInitialCamera;
	Engine::NCamera* mCurrentCamera;
	Cameras mCameras;
	static NDirector* sInstance;
};
}